local dropdash = 0
local dropdashlength = 0
addHook("PlayerThink", do
    for player in players.iterate
        if player.mo.skin ~= "sonic2"
			return
		end
		if (player.cmd.buttons & BT_SPIN) and (player.pflags & PF_JUMPED) then
			dropdash = 1
			dropdashlength = 10*FRACUNIT
			
		end
		if player.mo.z >= player.mo.floorz and dropdash == 1  then
			dropdashlength = dropdashlength + FRACUNIT
			player.mo.state = S_PLAY_SPINDASH
			player.pflags = $1|PF_SPINNING
		end
		if player.mo.z <= player.mo.floorz and dropdash == 1 then
			dropdash = 0
			player.mo.state = S_PLAY_ROLL
			P_Thrust(player.mo, player.mo.angle, dropdashlength)
			player.pflags = $1|PF_SPINNING
			dropdashlength = 0
		end
		if (player.pflags & PF_SPINNING) then
			player.normalspeed = player.speed+FRACUNIT
		else
			player.normalspeed = 36*FRACUNIT
		end
    end
end)

addHook("AbilitySpecial", do
    for player in players.iterate
        if player.mo.skin ~= "sonic2"
			return
		end		
		if (player.cmd.buttons & BT_JUMP) and (player.pflags & PF_JUMPED) and not (player.pflags & PF_THOKKED) and not (player.pflags & PF_JUMPDOWN) then
			P_SetObjectMomZ(player.mo, -20*FRACUNIT, true)
			dropdash = 1
			dropdashlength = 10*FRACUNIT
			player.mo.state = S_PLAY_SPINDASH
		end
    end
end)